var express = require('express');
var router = express.Router();
const md5 = require('blueimp-md5');
// 引入user表操作模块
var User = require('../db/user');

// 定义过滤器 指定过滤的属性
const filter = {password:0, __v:0};

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

// 注册一个路由: 用户注册
//  - path为 /register
//  - 请求方式为post
//  - 接收username和password参数
//  - admin是已注册用户
//  - 注册成功返回{code:0, data:{_id:'abc', username:'xxx', password:'123'}}
//  - 注册失败返回{code:1, msg:'该用户已注册'}
router.post('/register',function (req, res) {
    // 获取请求参数
    //   const {a} = b 等同于 const a = b.a
    const {username, password, type} = req.body;
    // 处理数据 若存在返回错误信息 不存在则保存
    User.findOne({username}, function (err, doc) {
        if(doc){
            res.send({code:1, msg:'用户已存在'})
        }else{
            new User({username, password:md5(password), type}).save(function (err, doc) {
                    // 生成一个cookie 参数分别为 名称 值 保存时间 并交给浏览器保存
                    res.cookie('userid', doc._id, {maxAge:1000*8*60*60});
                    const data = {username, type, _id: res._id};
                    res.send({code:0, data:data});
            });
        }
    })
});

router.post('/login', function (req, res) {
    const {username, password} = req.body;
    User.findOne({username, password:md5(password)}, filter, function (err, doc) {
        if(doc){
            res.cookie('userid', doc._id, {maxAge:1000*8*60*60});
            res.send({code:0, data:doc});
        }else{
            res.send({code:1, msg:'登录用户名或密码错误'})
        }
    })
});

// 更新用户信息的路由
router.post('/update', function (req, res) {
    const userid = req.cookies.userid;
    if(!userid){
        return res.send({code:1, msg:'请先登录'})
    }
        const user = req.body;
        // 根据userid 更新对应的user
        User.findByIdAndUpdate({_id: userid}, user, function (err, oldUser) {
            // 确保cookid没有被篡改
            if(!oldUser){
                // 通知浏览器删除userid的cookie
                res.clearCookie('userid');
                res.send({code:1, msg:'请先登录2'})
            }else{
                const {_id, username, type} = oldUser;
                // 合并用户信息
                // assign(obj1, obj2, obj3) 将多个指定的对象进行合并 返回一个合并后的对象
                const data = Object.assign(user, {_id, username, type});
                res.send({code:0, data})
            }
        })
});

module.exports = router;
